package com.hyf.eurekaConsumer.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

/**
 * 创建一个借口来消费 服务注册中心 提供的 服务
 */
@RestController
public class ConsumerController {

    @Autowired
    private LoadBalancerClient loadBalancerClient;
    @Autowired
    private RestTemplate restTemplate;


    /**
     * 我们注入了LoadBalancerClient和RestTemplate，
     * 并在/consumer接口的实现中，先通过loadBalancerClient的
     * choose函数来负载均衡的选出一个eureka-client的服务实例，
     * 这个服务实例的基本信息存储在ServiceInstance中，
     * 然后通过这些对象中的信息拼接出访问/dc接口的详细地址，
     * 最后再利用RestTemplate对象实现对服务提供者接口的调用。
     * @return
     */
    @GetMapping("/consumer")
    public String consumer(){
        //在服务注册中心，找出指定name的服务提供者
        ServiceInstance serviceInstance = loadBalancerClient.choose("eureka-client");
        String url="http://"+serviceInstance.getHost()+":"+serviceInstance.getPort()+"/dc";
        System.out.println("url="+url);
        return restTemplate.getForObject(url,String.class);
    }
}
